/* eslint-disable eol-last */
/* eslint-disable indent */
/* eslint-disable no-unused-vars */
'use strict';
const { timers } = require('jquery');
// eslint-disable-next-line no-unused-vars
const { registerUserNameNotExistInfo, registerFailInfo, changeInfoFailInfo } = require('../utils/ErrorModel');
const { SuccessModel, ErrorModel } = require('../utils/resultModel');


const Controller = require('egg').Controller;

class UserController extends Controller {
    // 获取登录信息
    getUserInfo() {
        let data = {
            isLogin: false, // 初始默认是未登录状态
        };
        // 如果用户已经登录
        const userInfo = this.ctx.session.getUserInfo;
        if (userInfo) {
            data = {
                isLogin: true,
                userName: userInfo.userName,
            };
        }

        return data;
    }

    // 登陆页面
    async loginPage() {
        await this.ctx.render('login.html', this.getUserInfo());
    }

    // 注册页面
    async registerPage() {
            await this.ctx.render('register.html', this.getUserInfo());
        }
        // 个人设置页面
    async settingPage() {
            // 获取用户信息
            const userInfo = this.ctx.session.getUserInfo;
            console.log(userInfo);
            await this.ctx.render('setting.html', {
                isNsv: true,
                userInfo,
            });
        }
        // 注册

    async register() {
            // 获取到数据 ，用户名，密码，性别
            const { userName, password, gender } = this.ctx.request.body;
            // 在service中做业务处理
            // try...catch 当语法错误时，会抛出异常(catch)，而不是终止服务
            try {
                await this.service.user.createUser({ userName, password, gender });
                // 注册成功 自己关注自己 方便首页获取关注人博客列表
                await this.service.userRelation.addFollower(result.id,
                    result.id);
                // 当注册成功时，可以什么都不返回，
                this.ctx.body = new SuccessModel();
            } catch (err) {
                // 打印错误信息 错误栈 以后再说
                console.log(err.message, err.stack);
                return new ErrorModel(registerFailInfo);
            }


        }
        // 用户名是否存在
    async isExist() {
        const { userName } = this.ctx.request.body;
        // service
        const getUserInfo = await this.service.user.getUserInfo(userName);
        console.log(getUserInfo);
        if (getUserInfo) {
            // 成功时直接返回，不需要传递数据 {errno：0，data：{}}
            this.ctx.body = new SuccessModel();
        } else {
            // 失败返回错误信息
            this.ctx.body = new ErrorModel(registerUserNameNotExistInfo);
        }
    }

    // 登陆
    async login() {
            // 获取前端请求的用户名和密码
            const { userName, password } = this.ctx.request.body;
            const userInfo = await this.service.user.doLogin({ userName, password });
            this.ctx.body = userInfo;
        }
        // 删除当前用户
    async deleteCurrentUser() {
            // 单元测试的情况下执行删除
            if (this.app.config.env === 'unittest') {
                // 在session中获取用户信息

                const { userName } = this.ctx.session.getUserInfo;
                console.log(this.ctx.session.getUserInfo);
                // 在service中删除用户信息
                const result = await this.service.user.deleteCurrentUser(userName);
                this.ctx.body = result;
            }
        }
        // 更改用户基本信息
    async changeUserInfo() {
            // 获取数据 昵称 城市 图片地址
            const { nickName, city, avatar } = this.ctx.request.body;
            // 获取用户名，被更改人
            const { userName } = this.ctx.session.getUserInfo;
            // 调用service中的updateUser方法
            const result = await this.service.user.updateUser({ newNickName: nickName, newCity: city, newAvatar: avatar }, { userName });
            // this.ctx.body = result;
            if (result) {
                this.ctx.body = new SuccessModel();
                Object.assign(this.ctx.session.getUserInfo, {
                    nickName,
                    city,
                    avatar,
                });
            } else {
                this.ctx.body = new ErrorModel(changeInfoFailInfo);
            }
        }
        // 更改密码
    async changePassword() {
        // 获取密码，用户名
        const { userName } = this.ctx.session.getUserInfo;
        const { newPassword, oldPassword } = this.ctx.request.body;
        // 将数据交给service处理
        const result = await this.service.user.updateUser({ newPassword }, { userName, password: oldPassword });
        this.ctx.body = result;
        // this.ctx.body = result;
        if (result) {
            this.ctx.body = new SuccessModel();
        } else {
            this.ctx.body = new ErrorModel(changeInfoFailInfo);
        }
    }

    // 在session中删除用户信息
    async logout() {
            delete this.ctx.session.getUserInfo;
            this.ctx.body = new SuccessModel();
        }
        // 获取at列表
    async getAtList() {
        const { id } = this.ctx.session.getUserInfo;
        // 获取关注人列表
        const result = await this.service.userRelation.getFollower(id);
        // result = {const,userList}
        // ['张三 - zahngsan'...'nikeName - userName']
        const atList = result.userList.map(user => {
            return `${user.nickName} - ${user.userName}`;
        });
        this.ctx.body = atList;
    }

}
module.exports = UserController;